SpringBoot关于@RequestBody请求参数 |
您所在的位置:网站首页 › 请求接口是 在body添加参数吗 › SpringBoot关于@RequestBody请求参数 |
一.Post请求中Dto参数带@RequestBody
方法代码: @PostMapping("/test") public UserDto getUserParam( @RequestParam String myName, @RequestHeader(value = "token", required = false) String token, @RequestAttribute(value = "attr", required = false) String attr, @RequestBody UserDto userDto )1.PostMan请求(Body不写任何东西): 请求结果: 结果返回报错, 我们看下源码, 1.【RequestResponseBodyMethodProcessor 类参数解析器】方法来处理,循环默认的10种消息转换器,找到当前参数类型进行解析 2.这里注意@RequestBody类型参数会用 MappingJackson2HttpMessageConverter 这个消息转换器, 3.判断当前类型无法解析当前参数,返回null,判断为空并且参数是必填的,就会抛出异常 2.PostMan请求(Body只写 {}): 请求结果: 结果返回成功, 我们看下源码, 1.经过消息解析器返回的结果不是null,只不过dto内部属性都是空的,但是并不会报错 二.Post请求中Dto参数不带@RequestBody方法代码: @PostMapping("/test") public UserDto getUserParam( @RequestParam String myName, @RequestHeader(value = "token", required = false) String token, @RequestAttribute(value = "attr", required = false) String attr, UserDto userDto )1.PostMan请求(Body不写任何东西或者写参数信息): 请求结果: 返回结果不报错,但是也没有赋值成功 2.PostMan请求(dto参数写到param参数): 请求结果: 返回结果成功,赋值成功 我们看下源码, 1.【ModelAttributeMethodProcessor 类参数解析器】方法来处理,获取请求中所有以param类型的参数,找到当前dto进行解析,如果找到和dto属性的参数名称一样就赋值 总结:1.dto实体类型的参数,标注@RequestBody(Default Required=true)注解时,Servlet一定会读取发送的Body体中的json参数, (1)Body体中什么都不传,返回会报错 (2)Body体中传{},返回不会报错,解析结果是属性为null的dto (3)Body体中传错误参数的{"a":1},返回不会报错,解析结果是属性为null的dto (4)【RequestResponseBodyMethodProcessor 类参数解析器】解析参数 2.dto实体类型的参数,什么注解都不标,Servlet会去读取发送的Param类似url?传参的参数 (1)Body体中什么都不传或者传{},返回不会报错,解析结果是属性为null的dto (2)Param类似url?传参,返回才会成功,解析结果才会成功 (3)【ModelAttributeMethodProcessor 类参数解析器】解析参数 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |